<attachment contenteditable="false" data-atts="%5B%5D" data-aid=".atts-d8c20f7c-c747-4814-97e8-98841c36f4dd"></attachment><p><br></p><p><img src="" width="808" style=""></p><ol><li>sessionid是一个会话的key，浏览器第一次访问服务器会在服务器端生成一个session，有一个sessionid和它对应。tomcat生成的sessionid叫做jsessionid。</li><li>session在访问tomcat服务器HttpServletRequest的getSession(true)的时候创建，tomcat的ManagerBase类提供创建sessionid的方法：随机数+时间+jvmid；</li><li>存储在服务器的内存中，tomcat的StandardManager类将session存储在内存中，也可以持久化到file，数据库，memcache，redis等。客户端只保存sessionid到cookie中，而不会保存session，session销毁只能通过invalidate或超时，关掉浏览器并不会关闭session。</li></ol><p><br></p><p><strong>在初次运行项目并访问index.jsp时，tomcat内部会在返回index.jsp之前自动调用了getSession函数产生session，并将sessionid放入到cookie中，如上图所示。</strong></p><p>如上验证：</p><p>随便写一个servlet，然后里面不调用getSession函数，运行项目后，直接范围这个servlet，而不是默认访问index.jsp，查看响应：</p><p><img src="" width="492" style=""></p><p>可以看到并没有jsession，所以可以判定，如果按照默认访问index.jsp（即直接访问项目路径），tomcat是会调用getSession函数产生session的，这或许牵扯到tomcat更为底层的原理。</p><p><br></p><p>参考：</p><p><a href="https://www.cnblogs.com/woshimrf/p/5317776.html" target="_blank">https://www.cnblogs.com/woshimrf/p/5317776.html</a></p><p><br></p>